home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Info-Mac 4
/
Info_Mac IV CD-ROM (Pacific HiTech Inc.)(August 1994).iso
/
Science
/
MAL ©P.f.Howden 1⁄1⁄89
/
FOURIER PLOT
< prev
next >
Wrap
Text File
|
1988-02-09
|
3KB
|
46 lines
5 CLS:CLEAR:PRINT"FAST FOURIER TRANSFORM . {RUN LINE 230 for quick entry of REAL TIME data}"
7 PRINT"Freq Data are the Coefficients A(N),B(N) of COS(NwT),SIN(NwT)."
10 W1=495:W1=W1-15:W2=293:'Set horizontal/vertical pixels resp.
15 INPUT "PLOT DATA (1/0)?=";D1
20 INPUT "NUMBER OF DATA POINTS(4,8,16...64.)=";A:Y=A
30 Y=Y/2:IF Y>1 THEN 30
40 IF Y<>1 THEN PRINT"NUMBER OF POINTS MUST=POWER OF 2.TRY AGAIN":GOTO 20
50 DIM A(2*A),B(2*A):PRINT"MENU: 1= TIME->FREQUENCY :";:INPUT "-1= FREQUENCY->TIME DOMAIN :=";D
60 B=1:C=1:GOSUB 130:I=1:FOR K=1 TO A-2:J=A
70 IF I>K THEN E=K:F=I:G=A(E):A(E)=A(F):A(F)=G:H=A(E+A):A(E+A)=A(F+A):A(F+A)=H
80 J=J/2:IF J<I THEN I=I-J:GOTO 80
90 I=I+J:NEXT K:FOR K=1 TO A/2:E=A-2*K:FOR J=1 TO K:B=(J-1)*D*3.141593#/K:C=COS(B):B=SIN(B)
100 FOR I=J TO (J+E) STEP (2*K):F=I+K:G=C*A(F)-B*A(F+A):H=C*A(F+A)+B*A(F):A(F)=A(I)-G
110 A(F+A)=A(I+A)-H:A(I)=A(I)+G:A(I+A)=A(I+A)+H:NEXT I:NEXT J:K=2*K-1:NEXT K:D=-D:B=1
120 IF D<0 THEN B=A
130 IF D>0 THEN PRINT"TIME DATA:"
140 IF D<0 THEN PRINT"FREQUENCY DATA:"
150 FOR K=1 TO A:J=K+A
160 IF C<0 THEN 170
163 PRINT"REAL #";K-1;:INPUT "=";A(K):PRINT"IMAG #";K-1;:INPUT "=";A(J)
165 B(K)=A(K):B(J)=A(J):IF D<0 AND K>1 THEN A(K)=A(K)/2:A(J)=A(J)/2
167 GOTO 190
170 A(K)=A(K)/B:A(J)=A(J)/B:IF D<0 AND K>1 THEN A(K)=A(K)*2:A(J)=A(J)*2
180 PRINT"REAL #";K-1;"=";A(K);TAB(32);"IMAG #";K-1;"=";A(J)
190 NEXT K:IF C>0 THEN RETURN
200 IF D1=1 THEN INPUT "PRESS RETURN TO CONTINUE";C$:CLS:W=W2/3:Z=2:GOSUB 205:LOCATE 17:PRINT"Results":W=2*W:D=-D:Z=18:GOSUB 205
202 INPUT "PRESS RETURN TO END";C$:END
205 B0=ABS(B(1)):FOR K=2 TO 2*A:IF ABS(B(K))>B0 THEN B0=ABS(B(K)):'PLOTTING DATA/RESULTS
210 NEXT K:LOCATE Z:IF D<0 THEN PRINT"Time Values['L' on plot line=Imag value]. ";A;"ordinates,largest=";B0:GOTO 215
213 PRINT"Freq Values(D.C. value first). ";A;"ordinates,largest=";B0
215 LINE (5,W)-(W1+5,W):FOR K=1 TO A:J=K+A:LINE (W1*(K-1)/(A-1)+5,W)- (W1*(K-1)/(A-1)+5,-B(K)*W2/(6*ABS(B0))+W)
220 LINE (W1*(J-A-1)/(A-1)+7,W)- (W1*(J-A-1)/(A-1)+7,-B(J)*W2/(6*B0)+W)
223 LINE -(W1*(J-A-1)/(A-1)+9,-B(J)*W2/(6*B0)+W)
225 B(K)=A(K):B(J)=A(J):NEXT K:RETURN
'FASTER REAL-DATA ONLY ENTRY METHOD :----------------------------
230 CLEAR:CLS:PRINT"FOURIER again-faster REAL data entry.":INPUT "NUMBER OF DATA POINTS=";V:DIM Y(V)
240 INPUT "MAXIMUM HARMONIC REQUIRED=";H:FOR Z=1 TO V:PRINT"Y";Z-1;:INPUT "=";Y(Z):A=A+Y(Z):NEXT Z
250 A=A/V:DIM A(H),B(H):FOR N=1 TO H:A(N)=0:B(N)=0:FOR X=1 TO V
260 A(N)=A(N)+Y(X)*COS(2*N*3.141593#*(X-1)/V)
270 B(N)=B(N)+Y(X)*SIN(2*N*3.141593#*(X-1)/V):NEXT X:A(N)=2*A(N)/V:B(N)=2*B(N)/V:NEXT N
280 CLS:PRINT"COEFFICIENTS of A(N),B(N) in COS(NwT),SIN(NwT) for HARMONIC N:":PRINT"Ao (DC)=";A
290 FOR N=1 TO H:PRINT"A";N;" COS=";A(N);";";
300 PRINT TAB(32);"B";N;" SIN=";B(N):NEXT N
310 INPUT "PRESS RETURN TO END";C$:END
MACINTOSH LISTING.